package br.lsi.supercurriculum.entidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 * @author Dannylo Johnathan
 * @since 21/08/2012
 */

/**
 * Classe que representa a entidade Pessoa, com sua chave primária sendo o cpf.
 */

@Entity
@Table(name = "pessoa")
public class Pessoa implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	private Long id;

	@OneToOne
	private Usuario usuario;

	@Column(name = "nome_pessoa")
	private String nome;

	@Column(name = "sexo_pessoa")
	private char sexo;

	@Column(name = "data_de_nascimento_pessoa")
	@Temporal(TemporalType.DATE)
	private Date dataDeNascimento;

	@Column(name = "cpf_pessoa")
	private String cpf;

	@Column(name = "nacionalidade_pessoa")
	private String nacionalidade;

	@Column(name = "estado_civil_pessoa")
	private String estadoCivil;

	@Column(name = "numero_de_dependentes_pessoa")
	private int numeroDependentes;

	@Column(name = "identidade_pessoa")
	private String identidade;

	@JoinColumn(name = "profissional_id")
	@OneToOne(cascade = CascadeType.ALL)
	private Profissional profissional;

	@OneToMany(cascade = CascadeType.ALL)
	private List<Contato> contatos;

	@JoinColumn(name = "endereco_id")
	@OneToOne(cascade = CascadeType.ALL)
	private Endereco endereco;

	public Profissional getProfissional() {
		return profissional;
	}

	public void setProfissional(Profissional profissional) {
		this.profissional = profissional;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public char getSexo() {
		return sexo;
	}

	public void setSexo(char sexo) {
		this.sexo = sexo;

	}

	public Date getDataDeNascimento() {
		return dataDeNascimento;
	}

	public void setDataDeNascimento(Date dataDeNascimento) {
		this.dataDeNascimento = dataDeNascimento;
	}

	public String getCpf() {
		return cpf;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getNacionalidade() {
		return nacionalidade;
	}

	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	public String getEstadoCivil() {
		return estadoCivil;
	}

	public void setEstadoCivil(String estadoCivil) {
		this.estadoCivil = estadoCivil;
	}

	public int getNumeroDependentes() {
		return numeroDependentes;
	}

	public void setNumeroDependentes(int numeroDependentes) {
		this.numeroDependentes = numeroDependentes;
	}

	public Usuario getUsuario() {
		return usuario;
	}

	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}

	public String getIdentidade() {
		return identidade;
	}

	public void setIdentidade(String identidade) {
		this.identidade = identidade;
	}

	public List<Contato> getContatos() {
		return contatos;
	}

	public void setContatos(List<Contato> contatos) {
		this.contatos = contatos;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

}
